15 对象的本质
对象
数据和行为,分别称为状态保存和消息发送,即现在的“属性”和“方法”。状态(或称为数据)的局部保存、保护和隐藏等概念,即现在的对象成员的可见性。
函数式语言不考虑数据封装问题,逻辑之间的数据是由函数界面(也就是函数参数)来传递的,而函数自身又强调“无副作用”,也就意味着它不影响函数之外的数据,因此函数外也就 没有任何数据封装(例如隐蔽)的要求了。
两种数据结构
编程思想的本质:
- 在编程中怎么管理数据;
- 在编程中怎么组织逻辑。
数据结构:将系统中的数据用统一的、确切的、有限的数据样式给管理起来。
语言的背后有着一个核心问题:如何抽象一堆数据,使得它们能被方便和有效地管理。
单机系统(像 JavaScript 这类应用环境的编程语言)中,这些数据是假设被放在有限的存储空间里面的。这个假设模拟了内存和指令带宽的基本性能。
一个数据结构的抽象层次越低级,对它的编程就越复杂。块是对有限空间的边界分解。从这些块的相关位置出发,以位置关系来看只有两个解:
- 为所有连续的块添加一个连续的索引;
- 为所有不连续的块添加一个唯一的名字。
所有数据可以堪称只具有两种数据结构的构成,一种称为索引数组(对应于可索引的块),另一种称为关联数组(对应于不可索引的块)。索引数组其实是关联数组的一个特例,即被存取的数据所关联的名字就是它的索引。
解构
结构是应用编程的必须,而解构是底层 计算的必须。
两种数据结构的统一
”数组赋值模板”其实是引用了数组的下标索引过程,ECMAScript 将索引次序用专门的增序来管理,并将右操作数视作为“迭代器”来取值。